package co.edu.usbcali.servicio.rest;

import java.util.Date;

import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import org.springframework.stereotype.Controller;

import co.edu.usbcali.correo.EmailController;
import co.edu.usbcali.modelo.Roles;
import co.edu.usbcali.modelo.Usuarios;
import co.edu.usbcali.modelo.dto.UsuariosDTO;
import co.edu.usbcali.modelo.restdto.UsuarioRestDTO;
import co.edu.usbcali.presentation.businessDelegate.IBusinessDelegatorView;
import co.edu.usbcali.utilities.ApplicationContextHolder;
 

@Path("login")
@Controller
public class LoginRest {
	
	@PUT
	@Path("/crearUsuario/{nombre}/{clave}/{email}/{rol}/")
	public void crearUsuario(
			@PathParam("nombre") String nombre,
					@PathParam("clave") String clave,
							@PathParam("email") String email,
									@PathParam("rol") Long rol){
		
		try {

			IBusinessDelegatorView businessDelegatorView=ApplicationContextHolder.getContext().getBean(IBusinessDelegatorView.class);
			UsuariosDTO usuariosDTO=businessDelegatorView.consultaUsuarioXEmail(email);
			if(usuariosDTO!=null){
								
			}else{
				
				Roles codRol=businessDelegatorView.getRoles(rol);
				
				Usuarios usu=new Usuarios();
				usu.setClave(clave);
				usu.setNombre(nombre);
				usu.setEmail(email);
				usu.setEstadoRegistro("A");
				usu.setFechaCreacion(new Date());
				usu.setFechaModifcacion(new Date());
				usu.setUsuCrea("Registro");
				usu.setUsuModifica("Registro");
				usu.setRoles(codRol);
				businessDelegatorView.saveUsuarios(usu);
				EmailController mail=new EmailController();
				String subject="Registro Exitoso en el sistema VAOI";
				String messageBody="Bienvenido User <br>  Usuario: " + email ;
				mail.performTask(email, subject, messageBody, null);

			}
			
		} catch (Exception e) {
			
			System.out.println(e.getMessage());

		}

	}
	
	@GET
	@Produces("application/json")
	@Path("/autenticacion/{email}/{clave}")
	public UsuarioRestDTO autenticacion(@PathParam("email") String email, @PathParam("clave") String clave){
		
		UsuarioRestDTO usuariosRest=null;
		try {
			IBusinessDelegatorView businessDelegatorView=ApplicationContextHolder.getContext().getBean(IBusinessDelegatorView.class);
			UsuariosDTO usuariosDTO=businessDelegatorView.loginUsario(email, clave);
			usuariosRest= new UsuarioRestDTO();
			usuariosRest.setNombre(usuariosDTO.getNombre());
			usuariosRest.setCodigoUsua(usuariosDTO.getCodigoUsua());
			usuariosRest.setEmail(usuariosDTO.getEmail());
			usuariosRest.setRol(usuariosDTO.getRol());
			usuariosRest.setCodigoRol_Roles(usuariosDTO.getCodigoRol_Roles());
			usuariosRest.setClave(usuariosDTO.getClave());
						
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}	
			
		return usuariosRest;
	}
	
	@GET
	@Produces("text/plain")
	@Path("/recuperarContrasena/{email}")
	public String recuperarContrasena(@PathParam("email") String email){
		
		String mensaje=null;
		
		try {
			IBusinessDelegatorView businessDelegatorView=ApplicationContextHolder.getContext().getBean(IBusinessDelegatorView.class);
			businessDelegatorView.recuperarContrasena(email);
			mensaje="La Contraseña se envio con exito al Email ingresado";
		} catch (Exception e) {
			mensaje=e.getMessage();
		}	
			
		return mensaje;
	}
	
}